package manager;

import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;

import session.AlunoSession;
import session.ProfessorSession;
import session.TurmaSession;
import entidade.Aluno;
import entidade.Professor;
import entidade.Turma;

@Named
@RequestScoped
public class ProfessorManager {

	@EJB
	private TurmaSession tSession;
	@EJB
	private ProfessorSession profSession;
	@EJB
	private AlunoSession aSession;

	private Professor prof;

	private Turma turma = new Turma();
	private Aluno aluno = new Aluno();

	private List<Turma> turmas;

	private List<Aluno> alunos;

	public String init() {
		String login = ((User) SecurityContextHolder.getContext()
				.getAuthentication().getPrincipal()).getUsername();
		prof = profSession.buscarPorLogin(login);
		return prof.getNome();
	}

	public List<Turma> getTurmas() {
		if (turmas == null) {
			turmas = tSession.findByProfessor(getProf().getId());
		}
		return turmas;
	}

	public void setTurmas(List<Turma> turmas) {
		this.turmas = turmas;
	}

	public List<Aluno> getAlunos() {
		if (alunos == null) {
			alunos = tSession.alunosDaTurma(turma.getId());

		}
		if (AlunoManager.alunos == null) {
			AlunoManager.alunos = alunos;
		}
		return alunos;
	}

	public void setAlunos(List<Aluno> alunos) {
		this.alunos = alunos;
	}

	public void updateNota(Aluno aluno) {
		aSession.updateNota(aluno);
	}
	
	public String direciona(Integer idTurma) {
		this.turma = tSession.findById(idTurma);
		AlunoManager.alunos = tSession.alunosDaTurma(idTurma);
		return "viewAlunos";
	}

	// public String preparaNota(Integer idAluno){
	// this.aluno = aSession.findById(idAluno);
	// return "formAluno";
	// }

	public Professor getProf() {
		if (prof == null) {
			init();
		}
		return prof;
	}

	public void setProf(Professor prof) {
		this.prof = prof;
	}

	public Turma getTurma() {
		return turma;
	}

	public void setTurma(Turma turma) {
		this.turma = turma;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}
}